// Copyright 2013 Ronald Schlenker, www.technewlogic.de.
// 
// This file is part of Byond.
// 
// Byond is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
// 
// Byond is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Byond.  If not, see <http://www.gnu.org/licenses/>.
using System.Collections.Generic;
using System.Linq;
using Utils;

namespace Byond.HostObjects
{
	internal sealed class Scheduler
	{
		private readonly List<ScheduleInfo> _scheduleInfos = new List<ScheduleInfo>();

		public void Schedule(ScheduleInfo scheduleInfo)
		{
			lock (_scheduleInfos)
				_scheduleInfos.Add(scheduleInfo);
		}

		public void ProcessScheduling()
		{
			lock (_scheduleInfos)
			{
				_scheduleInfos
					.Where(it => it.ReadyForAction)
					.ForEach(it =>
						{
							_scheduleInfos.Remove(it);
							it.Do();
						});
			}
		}

		public void OnTransportStopped()
		{
			_scheduleInfos.RemoveAll(it => it.RemoveWhenTransportHasStopped);
		}
	}
}